/* 
 * UsuarioController.java
 * Copyright (c) Faculdade Anhanguera de Anápolis.
 * Tecnologia em Análise e Desenvolvimento de Sistemas.
 * Projeto Multidisciplinar de Autoaprendizagem.
 *
 * Este software é confidencial e propriedade da Faculdade Anhanguera de Anápolis.
 * Não é permitida sua distribuição ou divulgação do seu conteúdo sem expressa autorização da Faculdade Anhanguera de Anápolis.
 * Este arquivo contém informações proprietárias.
 */
package br.com.pma.chamatec.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.inject.Inject;

import br.com.pma.chamatec.business.IPerfilBO;
import br.com.pma.chamatec.business.IUsuarioBO;
import br.com.pma.chamatec.exception.ChamatecNegocioException;
import br.com.pma.chamatec.util.EnumResources;
import br.com.pma.entity.Perfil;
import br.com.pma.entity.Usuario;

/**
 * Controlador que representa o Caso de Uso Manter Usuário.
 *
 * @author Ludemeula Fernandes de Sá
 */
@ManagedBean
@ViewScoped
public class UsuarioController extends AbstractController {
	private static final long serialVersionUID = -1846632077798318516L;

	@Inject
	private IUsuarioBO usuarioBO;

	@Inject
	private IPerfilBO perfilBO;

	@Inject
	private Usuario usuario;

	@Inject
	private Usuario usuarioSearch;

	private List<Usuario> usuarios;
	private List<Perfil> perfis;

	/**
	 * @see br.com.pma.chamatec.controller.AbstractController#init()
	 */
	@Override
	@PostConstruct
	public void init() {
		super.init();
		try {
			if (perfis == null || perfis.size() == 0) {
				perfis = perfilBO.getListDescricao();
			}
			limpar();
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Envia para a página de cadastro de Usuario.
	 * 
	 */
	public void novo() {
		usuario = new Usuario();
		mostraCadastro();
		setIsCadastro(true);
	}

	/**
	 * Volta para a tela de cadastro.
	 * 
	 */
	public String cancelar() {
		limpar();
		return "index";
	}

	/**
	 * Limpa os campos de pesquisa e a datatable.
	 * 
	 */
	public void limpar() {
		usuarios = null;
		Perfil perfil = new Perfil();
		usuarioSearch = new Usuario();
		usuarioSearch.setPerfil(perfil);
	}

	/**
	 * Retorna os dados da entidade Usuario.
	 * 
	 */
	public void pesquisar() {
		try {
			usuarios = null;
			usuarios = usuarioBO.pesquisar(usuarioSearch);
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Salva os dados da entidade Usuario.
	 * 
	 */
	public void salvar() {
		try {
			EnumResources msg = EnumResources.MS_001;
			if (usuario.getId() != null && usuario.getId() != 0) {
				msg = EnumResources.MS_002;
			}
			usuario = usuarioBO.salvar(usuario);
			usuario = new Usuario();

			addFacesMessage(msg);
			escondeCadastro();
			limpar();
			pesquisar();
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Envia para a tela de cadastro de Usuario.
	 * 
	 * @param usuario
	 */
	public void alterar(Usuario usuario) {
		this.usuario = usuario;
		mostraCadastro();
	}

	/**
	 * Remove os dados da entidade Usuario.
	 * 
	 */
	public void remover() {
		try {
			usuarioBO.remover(usuario);
			pesquisar();
			addFacesMessage(EnumResources.MS_003);
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}

	/**
	 * Atualiza dados do usuário de acordo com o SIAPE informado.
	 * 
	 * @param event
	 */
	public void changeCpf(AjaxBehaviorEvent event) {
		try {
			usuario = usuarioBO.recuperarFuncionarioPorCpf(usuario);
		} catch (ChamatecNegocioException e) {
			addFacesMessage(e.getMessage(), FacesMessage.SEVERITY_ERROR);
		} catch (Exception e) {
			montaMensagemGenerica(e);
		}
	}
	/********************************************* Getters e Setters *****************************************************/
	/**
	 * @return the usuario
	 */
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * @param usuario the usuario to set
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the usuarioSearch
	 */
	public Usuario getUsuarioSearch() {
		return usuarioSearch;
	}

	/**
	 * @param usuarioSearch the usuarioSearch to set
	 */
	public void setUsuarioSearch(Usuario usuarioSearch) {
		this.usuarioSearch = usuarioSearch;
	}

	/**
	 * @return the usuarios
	 */
	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	/**
	 * @param usuarios the usuarios to set
	 */
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	/**
	 * @return the perfis
	 */
	public List<Perfil> getPerfis() {
		return perfis;
	}

	/**
	 * @param perfis the perfis to set
	 */
	public void setPerfis(List<Perfil> perfis) {
		this.perfis = perfis;
	}
}